package control;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import model.AreaAtuacao;
import model.Atua;

import org.hibernate.exception.ConstraintViolationException;

import business.AreaAtuacaoDAO;
import business.AtuaDAO;

@ManagedBean(name="atuaHandler")
@SessionScoped

public class AtuaHandler implements Serializable {
	private static final long serialVersionUID = -6242710476556498261L;
	
	private AreaAtuacaoDAO areaAtuacaoDAO = AreaAtuacaoDAO.getInstance();
	private AtuaDAO atuaDAO = AtuaDAO.getInstance();
	private Atua atua = new Atua();
	private int areaAtuacaoId = 0;
	private int associadoId = 0;
	private boolean emEdicao = false;
	
	public AtuaDAO getAtuaDAO() {
		return this.atuaDAO;
	}
	public void setAtuaDAO(AtuaDAO atuaDAO) {
		this.atuaDAO = atuaDAO;
	}
	public Atua getAtua() {
		return this.atua;
	}
	public void setAtua(Atua atua) throws Exception {
		this.atua = atua;
	}
	public String novo()	{
		this.atua = new Atua();
		this.areaAtuacaoId = 0;
		this.emEdicao = true;
		return "associadoManter";
	}
	
	public String salvar(){
		FacesContext context = FacesContext.getCurrentInstance();
		this.atua.setAreaAtuacao(this.areaAtuacaoId);
		this.atua.setAssociado(this.associadoId);
		try {
			this.atuaDAO.salvar(this.atua);
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Atuação salva com sucesso!",""));
			this.emEdicao = false;
		} catch (ConstraintViolationException  e) {
			context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Atuação já cadastrada para o associado!",""));
		}
		return "associadoManter";
	}
	
	public void excluir(ActionEvent event)	{
	    UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("excluirAtuaParam");
		Integer id = (Integer) param.getValue();
		this.atuaDAO.remover(id);
		this.atua = new Atua();
		this.areaAtuacaoId = 0;
		this.emEdicao = false;
	}
	
	public List<Atua> getAtuacaoAssociado()	{
		List<Atua> itens = this.atuaDAO.listar(this.associadoId);
		return itens;
	}
	
	public List<SelectItem> getAtuacoes() {
		List<SelectItem> itens = new ArrayList<SelectItem>();
		List<AreaAtuacao> atuacoes = this.areaAtuacaoDAO.listar();
		for (AreaAtuacao areaAtuacao : atuacoes) {
			itens.add(new SelectItem(areaAtuacao.getId(), areaAtuacao.getDescricao()));
		}
		return itens;
	}
	
	public int getAreaAtuacaoId() {
		return areaAtuacaoId;
	}
	public void setAreaAtuacaoId(int areaAtuacaoId) {
		this.areaAtuacaoId = areaAtuacaoId;
	}
	public int getAssociadoId() {
		return associadoId;
	}
	public void setAssociadoId(int associadoId) {
		this.associadoId = associadoId;
	}
	public boolean getEmEdicao() {
		return this.emEdicao;
	}
	public void setEmEdicao(boolean emEdicao) {
		this.emEdicao = emEdicao;
	}
	public boolean getEmNavegacao() {
		return !this.emEdicao;
	}
}
